── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.3 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.3 ✔ tibble 3.2.1
✔ lubridate 1.9.2 ✔ tidyr 1.3.0
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ purrr::flatten() masks jsonlite::flatten()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Data.table (pour sa fonction d'importation fread)library(data.table)
Attaching package: 'data.table'
The following objects are masked from 'package:lubridate':
hour, isoweek, mday, minute, month, quarter, second, wday, week,
yday, year
The following objects are masked from 'package:dplyr':
between, first, last
The following object is masked from 'package:purrr':
transpose
## Information géographiquelibrary(geojsonsf)library(sf)
Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
## Cartographie thématiquelibrary(mapsf)
Acquisistion du fichier INSEE individus
On constitue un fichier des individus localisés dans les communes de Paris et Petite Couronne au RP de 2019 en reprenant le programme décrit dans le Cours n°1 de Camille Signoretto.
Le programme ci-dessous comporte la mention “eval=FALSE” car il ne dout être executé qu’une seule fois.
## Récupération des fichiers INSEE zippé## On utilise pour cela un dossier "tmp" download.file(url="https://www.insee.fr/fr/statistiques/fichier/6544333/RP2019_INDCVIZA_csv.zip",destfile ="tmp/RP2019_INDCVIZA_csv.zip")unzip("tmp/RP2019_INDCVIZA_csv.zip", exdir ="tmp")## Lecture du fichier individu avec freadlibrary(data.table)RP <-fread("tmp/FD_INDCVIZA_2019.csv", stringsAsFactors=TRUE)RP <-as.data.frame(RP)## Selection Paris PC RP <- RP %>%filter(DEPT %in%c(75, 92, 93, 94))saveRDS(RP, "data/RP/RP_final.RDS")## Lecture du fichier de métadonnéesmeta <-read.csv(file ='tmp/Varmod_INDCVI_2019.csv',sep =";",encoding ="UTF-8",stringsAsFactors =TRUE)## Sauvegarde des deux fichierssaveRDS(meta, "data/RP/meta.RDS")## nettoyage du dossier tmpunlink("tmp/*")
Acquisition de la géométrie des IRIS
On va maintenant acquérir le fichier des unités géographiques les plus petites (IRIS) pour la zone Paris + Petite Couronne. On se servira de ce fonds de carte des IRIS pour générer ensuite ceux des unités géographiques de niveau supérieur : communes, territoires, départements …
Comme les IRIS changent au cours du temps, il faut choisir le bon “millésime” pour que la correspondance soit possible avec les données individuelles du recensement. On utilise un lien de téléchargement depuis la base des iris millésimé accessible sur public.opendatasoft
Comme précédemment, ce programme est à executer une seule fois d’où la mention eval=FALSE dans l’en-tête du chunk.
## Lien de téléchargement IDF 2019 au forma geojsonmyurl <-"https://public.opendatasoft.com/api/explore/v2.1/catalog/datasets/georef-france-iris-millesime/exports/geojson?lang=fr&refine=year%3A%222019%22&refine=reg_name%3A%22%C3%8Ele-de-France%22&facet=facet(name%3D%22reg_name%22%2C%20disjunctive%3Dtrue)&timezone=Europe%2FBerlin"## téléchargement et conversion au format sfgeo<-geojson_sf(myurl)geo<-geo %>%select(iris_type, iris_code, iris_name,com_code= com_arm_code,com_name = com_arm_name, dep_code, dep_name, geometry)## Nettoyage des chaînes de caractèreclean_char <-function(x) { y<-gsub('\\[\"','',x) y<-gsub('\"\\]','',y)return(y)}geo <- geo %>%mutate(iris_code =clean_char(iris_code),iris_name =clean_char(iris_name),com_code =clean_char(com_code),com_name =clean_char(com_name),dep_code =clean_char(dep_code),dep_name =clean_char(dep_name), )## Selection Paris PCgeo<-geo %>%filter(dep_code %in%c("75","92","93","94"))#plot(geo["iris_type"])## SauvegardesaveRDS(geo,"data/RP/map_iris.RDS" )
## Carto rapidemap_iris <-readRDS("data/RP/map_iris.RDS")plot(map_iris["dep_code"], main ="IRIS")
Agrégation spatiale des iris en communes
On agrège par le nom et le code de la commune et on conserve le nom et le code du département.
On agrège simplement par le nom et le code du département.
map_iris <-readRDS("data/RP/map_iris.RDS")map_dep <- map_iris %>%group_by(dep_code, dep_name) %>%summarise()plot(map_dep["dep_code"], main ="Départements")
saveRDS(map_dep, "DATA/RP/map_dep.RDS")
Agrégation des données RP par iris
Nous allons maintenant examiner comment agréger les données individuelles de l’INSEE par iris, commune ou département et effectuer une jointure avec les fonds de cartes que nous avons préparé. On va s’appuyer pour cela sur le cours de datamining n°2 de Camille Signoretto.
On commence par recharger la fonction somme()que nous avions créé :
somme <-function(data, var_gpe, nom_var){ som <- data %>%group_by({{var_gpe}}) %>%count({{nom_var}}, wt=IPONDI) %>%mutate(n=round(n)) %>%pivot_wider(names_from = {{nom_var}}, values_from = n)return(som)}
Nous l’utilisons pour créer un tableau des individus par CSP simplifiées en 5 catégories et par IRIS :
# Chargement du tableauindiv <-readRDS("data/RP/RP_final.RDS")# Création de CSP simplifiéesindiv <- indiv %>%mutate(TACT5=case_when(TACT =="11"~"EMP", TACT =="12"~"CHO", TACT =="22"~"ETU", TACT =="21"~"RET",TRUE~"DIV"))# Agrégation par IRIS iris_csp <-somme(data = indiv,var_gpe = IRIS,nom_var = TACT5)
Jointure des CSP avec la géométrie des IRIS
On procède à la jointure des deux fichiers iris en utilisant le code des iris.
commune iris d'activité iris d'habitat iris divers Sum
Manquant 7 44 5 40 96
OK 0 74 2572 7 2653
Sum 7 118 2577 47 2749
On constate qu’il manque des données pour 96 IRIS sur 2749. Il s’agit dans la plupart des cas d’iris correspondant à des zones industrielles ou des forêts dont le nombre d’habitant est trop faible pour que les données soient mises à disposition au niveau individuel. Cela concerne également 7 communes de petites tailles et 5 iris d’habitat.
Création d’un fichier des CSP par commune
On reprend les programmes précédents par commune
# Chargement du tableauindiv <-readRDS("data/RP/RP_final.RDS")# Création de CSP simplifiéesindiv <- indiv %>%mutate(TACT5=case_when(TACT =="11"~"EMP", TACT =="12"~"CHO", TACT =="22"~"ETU", TACT =="21"~"RET",TRUE~"DIV")) # Extraction du code communal indiv<- indiv %>%mutate(com_code =substr(IRIS,1,5))# Agrégation par IRIS com_csp <-somme(data = indiv,var_gpe = com_code,nom_var = TACT5)# Chargement du fonds de carte communalmap_com <-readRDS("data/RP/map_com.RDS")# Jointuremap_com_csp <-left_join(map_com, com_csp)# SauvegardesaveRDS(map_com_csp, "data/RP/map_com_csp.RDS")# Analyse des valeurs manquantesmap_com_csp$missing<-case_when(is.na(map_com_csp$CHO) ~"Manquant",TRUE~"OK" )plot(map_com_csp["missing"], main="Communes sans données")
On retrouve les 7 communes manquantes pour lesquelles l’INSEE ne fournit pas les données dans le fichier détail des individus.